iT邦幫忙

2025 iThome 鐵人賽

DAY 2
0
自我挑戰組

用java解Leetcode系列 第 2

用java解Leetcode Day2

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20250916/20169501LEpn1gQ7G0.pnghttps://ithelp.ithome.com.tw/upload/images/20250916/20169501nHFLSeMw9n.png
2 . add two numbers
這題的目標是將兩個以鏈結串列表示的非負整數相加,然後以新的鏈結串列回傳總和。以題目的範例來說,有兩個百位數字342和465,但這兩個數字的個位、十位和百位卻是以顛倒的方式儲存在在串列中的,會變成[2,4,3]和[5,6,4],然後要將342和465相加,變成807,相加後,一樣要將位數顛倒儲存在串列中,變成[7,0,8]。
這題的關鍵問題在於進位,需要從個位將節點一個一個相加,並處理進位,例如:3 + 4 = 7(沒有進位),但到了4 + 6 = 10,十位得到了0,進位1,最後是百位, 5 + 2 + 1(剛才的進位1) = 8,最後的最後,如果最高位數出現了進位的話,需要在鏈結串列的末位新增一個節點來存放這個進位。
要解決這題,可以利用迭代法來遍歷這兩個鏈結串列。首先建立一個新的虛擬頭節點(dummy head),這樣可以方便地處理回傳的鏈結串列,再來建立一個目前節點(current),從虛擬頭節點開始,用來構建結果鏈結串列,接著,初始化一個進位(carry)變數,設為0,為了計算,要建立一個while迴圈,只要兩個鏈結串列中其中一個還有節點,或者進位不為0,就繼續迴圈。至於在迴圈內部,要取得l1和l2當前節點的值,如果節點為null,則視為0,接著計算總合 sum = val1 + val2 + carry,再來更新進位 carry = sum / 10,以上處理完後,建立一個新的節點,其值為 sum % 10,並將其連接到 current 的後面,再來將 current 移到新建立的節點,最後l1和l2要分別向前移動到下一個節點(如果存在的話)。迴圈結束後,回傳虛擬頭節點的下一個節點,這就是最終答案的結果鏈結串列。


上一篇
用java解Leetcode Day1
下一篇
用java解Leetcode Day3
系列文
用java解Leetcode4
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言